﻿//* ==========================================================================
// Classe : Systeme 
// Fonctions : Classe de fonctions systeme 
//
// License:  License LGPL 
// Version :  0.01    du 13/07/2008 
// Lien : http://outils.codeplex.com 
// Auteur(s) : JF. PACORY
// CopyLeft: CopyLeft (>) 2008-2009 GlopSoft <contact@glopsoft.com>
// Création : 06/20/2009 17:47:41
// Etat : en cours
// Controle du :
// Licence : 
// L'autorisation est accordée, à titre gratuit, à toute personne d'obtenir une copie 
// de ce logiciel et de ses fichiers de documentation, pour pouvoir utiliser 
//ce logiciel sans restriction, y compris, sans s'y limiter, les droits 
// d'utiliser, de copier, de modifier, de fusionner, de publier, de distribuer, 
// de sous-licence, et / ou de vendre les copies du Logiciel, et d'autoriser les 
// personnes auxquelles le logiciel est livré de le faire, sous réserve des 
// conditions suivantes:
// 
// Les avis de droit d'auteur et la présente autorisation doivent être inclus dans 
// toutes les copies ou parties substantielles du Logiciel.
// 
// LE LOGICIEL EST FOURNI "TEL QUEL", SANS GARANTIE DE QUELQUE NATURE QUE CE SOIT, 
// EXPLICITE OU  IMPLICITE, Y COMPRIS, MAIS SANS Y LIMITER LES GARANTIES DE QUALITE 
// MARCHANDE, D'ADEQUATION A UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. EN 
// AUCUN CAS LES AUTEURS OU LES TITULAIRES DE DROITS D'AUTEUR POURRONT ETRE TENUE 
// RESPONSABLES DE TOUT DOMMAGE,  RÉCLAMATION OU AUTRE  RESPONSABILITE, DANS LE 
// CADRE D'UNE ACTION DE CONTRAT, UN DELIT OU AUTRE, DÉCOULANT DE, OU EN RELATION 
// AVEC LE LOGICIEL OU DE SON UTILISATION OU AUTRES EN RELATION AVEC LE LOGICIEL.
// Licence LGPL : http://commonlibrarynet.codeplex.com/license 
//*---------------------------------------------------------------------------
//
//* ==========================================================================

#region Références

using System;
using System.IO;
using System.Reflection;
using System.Diagnostics;

#endregion

namespace Outils.Systeme
{
    /// <summary>
    /// fonctions Systeme.
    /// </summary>
    public static class Systeme
    {
        #region Attributs

        private static System.IFormatProvider formatCulture = new System.Globalization.CultureInfo("fr-FR", true);

        #endregion

        #region Propriétés


        /// <summary>
        /// Donne le nom de la methode en cours
        /// </summary>
        /// <remarks>03/07/2008</remarks>
        /// <returns>Nom de la methode en cours (string)</returns>

        public static string MethodeEnCours
        {
            get
            {
                return MethodInfo.GetCurrentMethod().ToString();
            }
        }


        /// <summary>
        /// Donne le nom de la classe en cours
        /// </summary>
        /// <remarks>03/07/2008</remarks>
        /// <returns>Nom de la classe en cours (string)</returns>

        public static string ClasseEnCours
        {
            get
            {
                return MethodInfo.GetCurrentMethod().DeclaringType.ToString();
            }
        }

        #endregion

        #region Retourne la version du programme et sa date de compilation : GetVersionDate

        /// <summary>
        /// Retourne la version du programme et sa date de compilation
        /// selon différentes options
        /// </summary>
        /// <param name="version">chaîne représentant une révision : M.m.C.R</param>
        /// <param name="option">
        /// 0 : version, date et heure
        /// 1 : version
        /// 2 : date
        /// 3 : heure
        /// 4 : date et heure
        /// </param>
        /// <returns>Chaine de version</returns>
        public static string GetVersionDate(string version, int option)
        {
            //
            // remplir majeure mineure construction revision
            string[] detailsVersion = version.Split('.');
            //
            // construction est égale au nombre de jours depuis le 1er janvier 2000
            DateTime dtDate = new DateTime(2000, 1, 1, 1, 0, 0);
            double jours = Convert.ToDouble(detailsVersion[2]);
            dtDate = dtDate.AddDays(jours);
            //
            // revision est égale au nombre de secondes depuis minuit heure locale, divisé par 2.
            double secondes = 2 * Convert.ToDouble(detailsVersion[3]);
            dtDate = dtDate.AddSeconds(secondes);
            //
            // retour de la version suivie de la date et heure de la compilation selon les cas
            switch (option)
            {
                case 1:
                    return string.Format(formatCulture, "{0}.{1}",
                                 detailsVersion[0],
                                 detailsVersion[1]
                                );

                case 2:
                    return string.Format(formatCulture, "{0}",
                                 dtDate.ToShortDateString()
                                );

                case 3:
                    return string.Format(formatCulture, "{0}",
                                 dtDate.ToShortTimeString()
                                );

                case 4:
                    return string.Format(formatCulture, "{0} {1}",
                                 dtDate.ToShortDateString(),
                                 dtDate.ToShortTimeString()
                                );

                default:
                    return string.Format(formatCulture, "version {0}.{1} du {2} à {3}",
                                 detailsVersion[0],
                                 detailsVersion[1],
                                 dtDate.ToShortDateString(),
                                 dtDate.ToShortTimeString()
                                );
            }
        }

        #endregion

        #region lancement d un processus

        /// <summary>
        /// lancement d un processus
        /// </summary>
        /// <param name="choixDossier">répertoire ouvert</param>

        public static void LanceProcess(string choixDossier)
        {
            try
            {
                System.Diagnostics.Process.Start(choixDossier);
            }
            catch (FileNotFoundException ex)
            {
                Debug.WriteLine("Erreur LanceProcess() " + ex.Message);
                throw ex;
            }
        }

        #endregion

        #region Génère une liste des variables d'environnement

        /// <summary>
        /// Génère une liste des variables d'environnement
        /// </summary>
        public static void VariablesEnvironnement()
        {
            /*
			listView_Vars.Items.Clear();
			ListViewItem item;
			
			// récupération de la liste des variables d'environnement
			IDictionary variables = Environment.GetEnvironmentVariables();
			
			listView_Vars.BeginUpdate();
			
			// parcours et ajout au listview
			foreach ( DictionaryEntry variable in variables)
			{
				item = new ListViewItem((string)variable.Key); // (string)variable.Key donne le "nom" de la
				
				variable
					item.SubItems.Add((string)variable.Value); // (string)variable.Value donne sa valeur
				listView_Vars.Items.Add(item);
			}
			
			listView_Vars.EndUpdate();
             */
        }
        #endregion
    }
}
